[Сервер] Установка Lets Encrypt и Certbot на Debian 12 с автоматическим перезапуском сервисов.

Шаг 1. Установка Certbot на Debian 12

Debian 12 содержит certbot в стандартных репозиториях, но рекомендую поставить snap-версию, так как она всегда актуальна.

1.1 Установка snapd (если ещё нет)

sudo apt update
sudo apt install snapd
sudo systemctl enable --now snapd.socket
sudo ln -s /var/lib/snapd/snap /snap

Перезайдите в терминал или выполните:

source /etc/profile

1.2 Установка certbot через snap

Удалите старый certbot, если он установлен:

sudo apt remove certbot

Установите certbot в snap:

sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

Шаг 2. Получение сертификата

Пример для standalone:

sudo certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com

Для nginx или apache используйте:

sudo certbot --nginx

или

sudo certbot --apache

Важно про автоперезапуск сервисов

Когда certbot обновляет сертификаты, иногда необходимо перезапустить сервисы, чтобы они «подхватили» новые файлы.

Шаг 3. Скрипты для перезапуска сервисов

Создаём скрипты:

nano /usr/local/bin/restart_services.sh

Вставляем:

#!/bin/bash
systemctl restart myapp.service
systemctl restart myblog.service
systemctl restart myeditor.service
systemctl restart games.service
systemctl restart site.service
nano /usr/local/bin/restart_all_services.sh

Вставляем:

#!/bin/bash
/usr/local/bin/restart_services.sh
systemctl restart torrserver.service
systemctl restart x-ui.service

Назначаем права на исполнение:

sudo chmod +x /usr/local/bin/restart_services.sh
sudo chmod +x /usr/local/bin/restart_all_services.sh

Как определить имя сервиса certbot

Чтобы точно узнать имя сервиса certbot в вашей системе, выполните команду:

systemctl list-units | grep certbot

По результату определите, какое имя сервиса использовать в следующем шаге:
- если в выводе есть snap.certbot.certbot.service, значит certbot установлен через snap — используйте это имя;
- если есть certbot.service, значит стандартная установка — используйте это имя.

Шаг 4. Настройка systemd override для certbot

Выполните команду, соответствующую варианту установки certbot.

Если certbot установлен через snap: выполните команду:

sudo systemctl edit snap.certbot.certbot.service

Если certbot установлен стандартно (не через snap): выполните команду:

sudo systemctl edit certbot.service

Вставляем:

[Service]
ExecStartPost=/usr/local/bin/restart_all_services.sh

Сохраняем и выходим.

Шаг 5. Перезагружаем systemd

sudo systemctl daemon-reload

Шаг 6. Проверка и тестирование

sudo certbot renew --dry-run

Если видите:

Congratulations, all simulated renewals succeeded:
...

значит всё настроено правильно.

Как проверить SSL-сертификат

После установки и настройки сертификата важно убедиться, что он корректно установлен и действителен. Это можно сделать двумя способами: через онлайн-сервисы и прямо на VPS в консоли.

Онлайн проверка сертификата

Используйте бесплатные и удобные сервисы для проверки:

Достаточно ввести доменное имя, например server.tonicman.ru, и запустить проверку. В выдаче увидите данные о центре сертификации, сроках действия, поддерживаемых протоколах и другие параметры безопасности.

Проверка сертификата через консоль VPS

На своем сервере с Linux можно использовать утилиту openssl для диагностики сертификата.

openssl s_client -connect server.tonicman.ru:443 -showcerts
echo | openssl s_client -connect server.tonicman.ru:443 2>/dev/null | openssl x509 -noout -dates
openssl s_client -connect server.tonicman.ru:443 -showcerts </dev/null 2>/dev/null | openssl x509 -outform PEM > cert.pem
openssl x509 -in cert.pem -noout -text

Эти команды помогут контролировать актуальность и корректную работу SSL-сертификата прямо из вашей консоли.

Переход на работу через Nginx (Reverse Proxy)

Если вы решили использовать Nginx как единую точку входа (чтобы за SSL отвечал только он), выполните следующие действия по очистке и перенастройке:

1. Что удалить в настройках приложений

Чтобы приложения (бекенды, редакторы, игры) перестали сами пытаться подгружать SSL-сертификаты, нужно очистить их файлы запуска:

  1. Откройте юнит-файл каждого такого сервиса: sudo nano /etc/systemd/system/имя_сервиса.service.
  2. В строке ExecStart удалите флаги, указывающие на SSL (например: --ssl-keyfile ... и --ssl-certfile ...).
  3. Сохраните файл и примените изменения командой: sudo systemctl daemon-reload.

2. Изменение скрипта перезапуска под Nginx

Теперь, когда приложения работают через прокси, им не требуется перезапуск при обновлении сертификатов. Достаточно перезагрузить сам Nginx.

Отредактируйте скрипт:

nano /usr/local/bin/restart_services.sh

Удалите старое содержимое и вставьте нужный вам вариант:

Вариант только для Nginx:

#!/bin/bash
systemctl restart nginx

Вариант для Nginx + 3x-ui (если используете оба):

#!/bin/bash
systemctl restart x-ui
systemctl restart nginx
systemctl restart torrserver.service

3. Удаление лишних скриптов

Если вы ранее создавали промежуточный скрипт restart_all_services.sh и он вам больше не нужен, его можно удалить:

sudo rm /usr/local/bin/restart_all_services.sh

В этом случае в Шаге 4 (systemd override) убедитесь, что в параметре ExecStartPost указан прямой путь к основному скрипту: /usr/local/bin/restart_services.sh. Для проверки того, что автоматическое продление и перезапуск сервисов (включая работу скрипта) настроены верно, существует встроенная функция тестирования Certbot.

Шаг 7. Проверка автоматического продления

Чтобы убедиться, что система не только обновит сертификат, но и корректно выполнит ваши скрипты перезагрузки, выполните команду «сухого запуска»:

sudo certbot renew --dry-run

На что обратить внимание в выводе:

  1. Успех продления: Вы должны увидеть сообщение Congratulations, all simulated renewals succeeded. Это значит, что Certbot успешно связывается с серверами Let's Encrypt.
  2. Работа ваших скриптов: Сразу после выполнения этой команды проверьте статус ваших сервисов (Nginx или других приложений из скрипта) командой:
systemctl status nginx

В строке Active вы увидите время запуска. Если автоматизация сработала, то время запуска должно совпадать с моментом выполнения команды renew --dry-run (несколько секунд назад). Это подтверждает, что ExecStartPost успешно вызывает ваш скрипт.

Если команда выдаёт ошибку:

Теперь вы можете быть уверены, что через 60-90 дней сервер обновит всё самостоятельно без вашего участия.

Итог

Теперь на Debian 12 certbot установлен и при обновлении сертификата автоматически перезапускает ваши сервисы через заданные скрипты.